C++ 继承

继承

  • 语法 class TextMessage: public Message

  • 子类成员初始化列表可以调用父类的构造函数

    • TextMessage() : Message(123) {}
  • 子类不继承父类构造函数

  • 实例创建和销毁流程

    ObjectCreateFlow.png

  • 子类继承父类的成员,可以拓展新成员,同名的会覆盖

    • private 成员可以使用父类的名称限定符来访问 Message::HidenProperty

多态

1
2
3
void Send(Message& msg) {
msg.SendMessage();
}
  • 可以把子类对象的引用当作父类对象的引用使用

  • 重写

    • 父类方法标记为虚函数

      • virtual void SendMessage() { }
    • 子类重写

      • void SendMessage() override {...}
      • 如果父类没有对应的虚方法,编译报错
    • override 关键字不必须的,但可以编译期检查

    • 包含纯虚函数的类就是抽象类,抽象类是不能实例化的

      • 纯虚函数定义 virtual void SendMessage() = 0
  • 重写子类析构函数要把父类设为虚析构函数

    • virtual ~Message() {...}
    • delete 子类实例,会先执行子类析构函数,子类析构函数会调用父类虚析构函数
作者

大下坡

发布于

2023-11-10

更新于

2023-11-10

许可协议